package com.tencent.iov.cowin.befsale.clue.service.cus;

import com.tencent.iov.cowin.befsale.clue.controller.clue.vo.request.QueryClueCustomerCollectAllRequest;
import com.tencent.iov.cowin.befsale.clue.controller.clue.vo.response.ClueCustomerCollectResponse;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.request.QueryCustomerRequest;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.request.UpdateClueEmpRequest;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.request.UpdateCustomerRequest;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.response.ClueDictionariesResponse;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.response.CustomerResponse;
import com.tencent.iov.cowin.befsale.clue.domain.clue.po.Clue;
import com.software.boot.common.model.dao.PageRequest;
import com.software.boot.common.model.dao.PageResponse;

import java.util.List;
import java.util.Map;

/**
 * @Describe: 经销商客户表主表+客户好友关联表_Service接口层
 * @author: xiamu
 * @created: 2021-12-21 17:29:48
 * @version: 1.0
 */

public interface CustomerService {

    /**
     * 通过ID获取详细信息
     *
     * @param id 主键ID
     * @param dealerId 经销商ID
     * @return: CustomerResponse对象
     */
    CustomerResponse getDetailByIdAndDealerId(Long id, String dealerId);

    /**
     * 获取总部客户信息
     * @param id 客户主键ID
     * @param dealerId 经销商ID
     * @return 总部客户信息
     */
    CustomerResponse getOemCustomerDetailByIdAndDealerId(Long id, String dealerId);

    /**
     * 根据条件查询对象list列表
     *
     * @param request 查询参数
     * @return 查询结果
     */
    List<CustomerResponse> getListByParam(QueryCustomerRequest request);

    /**
     * 根据客户类型获取客户信息
     * @param request 参数
     * @return 客户信息
     */
    Map<Long, CustomerResponse> getCustomerMapByCusType(QueryCustomerRequest request);

    /**
     * 根据条件查询单个对象
     *
     * @param request 查询条件
     * @return 返回单个商客户对象
     */
    CustomerResponse getOneByParam(QueryCustomerRequest request);

    /**
     * 获取客户标签字典信息
     *
     * @return 客户标签字典信息
     */
    List<ClueDictionariesResponse> getClueCustomerDictionaries();

    /**
     * 获取客户与线索标签信息
     *
     * @param customerResponse 客户信息
     * @return 拼接客户标签信息
     */
    String getClueCustomerTagStr(CustomerResponse customerResponse);

    /**
     * 更新客户信息（包含标签信息）
     *
     * @param request 更新客户信息
     * @return 是否更新成功
     */
    Boolean updateCustomerInfo(UpdateCustomerRequest request);

    /**
     * 分配顾问-批量
     *
     * @param request 分配顾问参数
     * @param clues   线索列表信息
     * @return 是否分配成功
     */
    Map<Long, CustomerResponse> distributeCustomers(UpdateClueEmpRequest request, List<Clue> clues);

    /**
     * 分配顾问-批量
     *
     * @param request 分配顾问参数
     * @param clue   线索列表信息
     * @return 是否分配成功
     */
    CustomerResponse distributeCustomer(UpdateClueEmpRequest request, Clue clue);

    /**
     * 导出线索数据
     * @param request 参数
     * @return 导出信息
     */
    String exportClueCollectAndFollowList(PageRequest<QueryClueCustomerCollectAllRequest> request);

    /**
     * 总部管理入口-线索列表查询
     * @param request 参数
     * @return 查询结果
     */
    PageResponse<ClueCustomerCollectResponse> getManagePageListByParam(PageRequest<QueryClueCustomerCollectAllRequest> request);
}